// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue';
import App from './App';

// 导入 vuex 状态管理模式
// import Vuex from 'vuex';
import store from './store/index';
// 导入 路由
import router from './router';

// 导入 localStorage全局方法
import local from './api/localstorage';
// 导入 axios promise 的 HTTP 库
import instance from './api/axios';

// 导入 elementUI 第三方UI库
// import ElementUI from 'element-ui';
// import 'element-ui/lib/theme-chalk/index.css';
// 导入 Icon-font
import '../static/fonts/iconfont';

// 导入 MD5加密
import md5 from 'js-md5';
// 导入 快捷复制
import clipboard from 'clipboard';

// 引入nprogress
import NProgress from 'nprogress'; // 进度条
import 'nprogress/nprogress.css'; // 这个样式必须引入

import Print from 'vue-print-nb';

Vue.use(Print);

// 注册 全局变量
Vue.prototype.$http = instance;
Vue.prototype.$md5 = md5;
Vue.prototype.$clipboard = clipboard;

// 加载 已导入模块
// Vue.use(Vuex);
// Vue.use(ElementUI);

// 阻止启动生产消息
Vue.config.productionTip = false;

// 配置加载进度条
NProgress.inc(0.2);
NProgress.configure({showSpinner: false});
NProgress.configure({ easing: 'ease', speed: 100 });
NProgress.configure({minimum: 0.3});
NProgress.set(0.4);

// 路由守卫 加载路由前执行
// to：router即将进入的路由对象
// from：当前导航即将离开的路由
// next：Function,进行管道中的一个钩子，如果执行完了，则导航的状态就是 confirmed （确认的）；否则为false，终止导航。
router.beforeEach((to, from, next) => {
  NProgress.start();
  // 如果未匹配到路由
  if (to.matched.length === 0) {
    // 如果上级也未匹配到路由则跳转404页面，如果上级能匹配到则转上级路由
    from.name ? next({ name: from.name }) : next('/404');
  } else {
    // 是否验证
    if (to.meta.auth) {
      // 判断是否存在缓存
      if (localStorage.getItem('vuex') != null) {
        // 是否登录
        if (local.get('vuex').token) {
          next();
        } else {
          // 未登录则跳转到登录页面
          next({
            name: 'login',
            query: {
              redirect: to.fullPath
            }
          });
        }
      } else {
        // 不存在则跳转到登录页面
        next({
          name: 'login',
          query: {
            redirect: to.fullPath
          }
        });
      }
    } else {
      // 不验证直接跳转
      next();
    }
  }
});

router.afterEach(() => {
  NProgress.done();
});

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store,
  components: { App },
  template: '<App/>'
});
